/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import Dominio.Especialidad;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Agustin
 */
public class PersistenciaEspecialidad {

    private static PersistenciaEspecialidad instance;

    public static PersistenciaEspecialidad getInstance() {
        if (instance == null) {
            instance = new PersistenciaEspecialidad();
        }
        return instance;
    }

    public ResultSet ejecutarSeleccion(String query) throws SQLException {
        ResultSet rs;
        try {
            Conexion.getInstance().conectar();
            rs = Conexion.getInstance().select(query);
        } catch (Exception e) {
            throw new UnsupportedOperationException(e.toString());
        }
        return rs;
    }

    public Especialidad recorerRS(ResultSet rs) throws SQLException {
        Especialidad esp1 = new Especialidad();
        try {
            esp1.setNombre(rs.getObject(1).toString());
            esp1.setVHB(Integer.parseInt(rs.getObject(2).toString()));
        } catch (Exception e) {
            throw new UnsupportedOperationException(e.toString());
        }
        return esp1;
    }

    public List<Especialidad> traerRS(String query) throws SQLException {
        List<Especialidad> especialidades = new ArrayList<Especialidad>();
        try {
            ResultSet rs = ejecutarSeleccion(query);
            if (rs.next()) {
                especialidades.add(recorerRS(rs));
                while (rs.next()) {
                    especialidades.add(recorerRS(rs));
                }
            } else {
                Especialidad e = new Especialidad();
                especialidades.add(e);
            }
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        Conexion.getInstance().desconectar();
        return especialidades;
    }

    public List<Especialidad> select(String especialidad) throws SQLException {
        String query = "";
        if (especialidad.equals("")) {
            query = "Select * from Especialidades";
        } else if (especialidad.equals("+")) {
            query = "select * from Especialidades where nombre= (select top 1 * from (select especialidad from Usuarios inner join (select * from usuarios_empresas inner join (select * from calificaciones) as tabla1 on tabla1.id_empleado=usuarios_empresas.id_empleado) as tabla2 on tabla2.nombre_usuario=usuarios.nombre_usuario group by especialidad order by  count(valor)desc   ,sum(valor=+1 ) asc , sum(fecha) asc))";
        } else {
            query = "select * from Especialidades where nombre='" + especialidad + "'";
        }
        return traerRS(query);
    }

    public void insert(String nombre, double VHB) {
        try {
            String query = "insert into Especialidades (nombre,VHB) values('" + nombre + "'," + VHB + ")";
            Conexion.getInstance().conectar();
            Conexion.getInstance().insert(query);
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
